#ifndef NUC_COMMU_H
#define NUC_COMMU_H

#include "struct_typedef.h"
#define SEND_START 'S'          //开始标志
#define SEND_END 'E'            //结束标志

#define NUCINFO_RX_BUF_NUM 128u

#define NUCINFO_FRAME_LENGTH 64u

typedef struct 
{
    uint32_t start;	// 开始标志符号，'S'
    fp32 pitch;	// 目标delta_pitch角度
    fp32 yaw;		// 目标delta_yaw角度
    fp32 x;		// 云台坐标系下的x速度
    fp32 y;		// 云台坐标系下的y速度
    fp32 w;		// 云台坐标系下的角速度w
    uint32_t shoot;	// 确认发射
    uint32_t found_armor;	// 找到了装甲板
    uint32_t checksum;   //校验和
    uint32_t reserved[6];	// 保留字段
    uint32_t end;	// 结尾标志符号，'E'
} toSTM32_t;


enum my_color_enum {
    COLOR_RED   = 0,
    COLOR_BLUE  = 1,
};

typedef struct
{
    uint32_t start;                 // 开始符号，'S'
    uint32_t blood : 12;            // 剩余血量，不会高于4096
    uint32_t bullet_remaining : 12; // 剩余子弹，不会高于4096
    uint32_t my_color : 8;          // 本方颜色，32bit对齐
    uint32_t checksum;              // 校验和，前方所有数据按32bit分段直接相加
    uint32_t end;                   // 结束符号，'E'
}toNUC_t;
//初始化从nuc接收信息
extern void nuc_control_init(void);

// 获取控制存储好的nuc信息的指令
extern const toSTM32_t *get_nuc_control_point(void);


//找到了返回1，未找到则返回0.当发送的数据起始为'S'则为找到
int foundArmor(void);

//标记数据的接收状态
// 设置有效
void NUCSetReadMark(void);

// 设置NUC数据无效
void NUCClearReadMark(void);

// 判断NUC数据是否有效
int NUCisAvailable(void);


//标记数据的接收状态
//云台
void gimbalSetReadMark(void);

void gimbalClearReadMark(void);

int gimbal_NUCisAvailable(void);
//发射
void shootSetReadMark(void);

void shootClearReadMark(void);

int shoot_NUCisAvailable(void);

void to_nuc_send_task(void const *pvParameters);

#endif // !NUC_COMMU_H
